package com.huiminpay.transaction.api;

import com.huiminpay.common.cache.domain.BusinessException;
import com.huiminpay.transaction.dto.PayChannelDTO;
import com.huiminpay.transaction.dto.PayChannelParamDTO;
import com.huiminpay.transaction.dto.PlatformChannelDTO;

import java.util.List;

/**
 * @ClassName: PayChannelService
 * @Package: com.huiminpay.transaction.api
 * @Description: 支付渠道服务接口 管理平台支付渠道，原始支付渠道，以及相关配置
 * @Author 谢同学
 * @Create 2023/11/21 16:25
 * @Version 1.0
 */
public interface PayChannelService {
    /**
     * 获取平台服务类型
     * @return
     * @throws BusinessException
     */
    List<PlatformChannelDTO> queryPlatformChannel() throws BusinessException;

    /**
     * 给应用绑定服务类型
     * @param appId 应用id
     * @param platformChannelCodes 服务类型code
     * @throws BusinessException
     */
    void bindPlatformChannelForApp(String appId,String platformChannelCodes) throws BusinessException;

    /**
     * 查询应用是否已经绑定了某个服务类型
     * @param appId 应用id
     * @param platformChannel 服务类型
     * @return 已绑定返回1，否则 返回0
     * @throws BusinessException
     */
    int queryAppBindPlatformChannel(String appId,String platformChannel) throws BusinessException;

    /**
     * 根据平台服务类型获取支付渠道列表
     * @param platformChannelCode 服务类型code
     * @return 付渠道列表
     * @throws BusinessException
     */
    List<PayChannelDTO> queryPayChannelByPlatformChannel(String platformChannelCode) throws BusinessException;

    /**
     * 保存支付渠道参数
     * @param payChannelParamDTO 商户原始支付渠道参数
     * @throws BusinessException
     */
    void savePayChannelParam(PayChannelParamDTO payChannelParamDTO) throws BusinessException;

    /**
     * 根据应用id和 服务类型code 查询支付渠道参数列表 结果可能是多个(支付宝param 微信param)
     * @param appId 应用id
     * @param platformChannel 服务类型code
     * @return
     */
    List<PayChannelParamDTO> queryPayChannelParamByAppIdAndPlatformcode(String appId, String platformChannel) throws BusinessException;

    /**
     * 获取指定应用指定服务类型下所包含的某个原始支付参数
     * @param appId 应用id
     * @param platformChannel 服务类型code
     * @param payChannel 支付渠道
     * @return
     * @throws BusinessException
     */
    PayChannelParamDTO queryPayChannelParamByAppIdAndPlatformcodeAndPayChannel(String appId, String platformChannel,String payChannel) throws BusinessException;

}
